package com.softer.wxzj.mapper;

import com.softer.wxzj.common.entity.CommonResult;
import com.softer.wxzj.entity.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author Gong Zhiyang
 * @date 2019/6/28
 */
@Repository
public interface DepositApplyMapper {
    /**
     * 精确查询 交存申请查询列表
     *
     * @param baseRegionInfo 查询实体
     * @return 交存申请查询列表
     */
    List<BaseRegionInfo> getDepositApplyList(BaseRegionInfo baseRegionInfo);

    /**
     * 模糊查询 交存申请查询列表
     *
     * @param fuzzy    模糊查询字段
     * @param zoneCode 区县代码
     * @param state    状态
     * @return 交存申请查询列表
     */
    List<BaseRegionInfo> fuzzySearch(@Param("fuzzy") String fuzzy, @Param("zoneCode") String zoneCode, @Param("state") String state, @Param("flowState") String flowState);

    /**
     * 精确查询 根据申请ID查询申请明细
     *
     * @param depositAudit 查询实体
     * @return 申请明细
     */
    List<DepositAudit> getListByReqId(DepositAudit depositAudit);

    /**
     * 查询打印清册的数量
     *
     * @param id 申请ID
     * @return 数量
     */
    int countNum(String id);

    /**
     * 精确查询 根据申请ID查询申请明细的合计
     *
     * @param depositAudit 查询实体
     * @return 申请明细的合计
     */
    DepositAudit getTotalByReqId(DepositAudit depositAudit);

    /**
     * 模糊查询 根据申请ID查询申请明细
     *
     * @param fuzzy 模糊查询字段
     * @param id    申请ID
     * @return 申请明细
     */
    List<DepositAudit> fuzzyByReqId(@Param("fuzzy") String fuzzy, @Param("id") String id);

    /**
     * 模糊查询 根据申请ID查询申请明细的合计
     *
     * @param fuzzy 模糊查询字段
     * @param id    申请ID
     * @return 申请明细合计
     */
    DepositAudit fuzzyTotalByReqId(@Param("fuzzy") String fuzzy, @Param("id") String id);

    /**
     * 精确查询 根据小区ID查询申请列表
     *
     * @param depositApply 查询实体
     * @return 申请列表
     */
    List<DepositApply> getListByRegionId(DepositApply depositApply);

    /**
     * 模糊查询 根据小区ID查询申请列表
     *
     * @param fuzzy 模糊查询字段
     * @param id    小区ID
     * @return 申请列表
     */
    List<DepositApply> fuzzyByRegionId(@Param("fuzzy") String fuzzy, @Param("id") String id);

    /**
     * 查询代缴企业列表
     *
     * @param id 小区ID
     * @return 企业列表
     */
    List<BaseOrganization> getOrganization(String id);

    /**
     * 查询代缴企业列表
     * @param id
     * @return
     */
    List<BaseOrganization> getAllOrganization(String id);

    /**
     * 精确查询业主自交列表或者企业代缴申请列表
     *
     * @param depositAudit 查询实体
     * @return 申请列表
     */
    List<DepositAudit> getDepositApplyListByRegionId(DepositAudit depositAudit);

    /**
     * 模糊查询业主自交列表或者企业代缴申请列表
     *
     * @param id        小区ID
     * @param fuzzy     模糊查询字段
     * @param flowState 状态
     * @return 申请列表
     */
    List<DepositAudit> fuzzyDepositApplyListByRegionId(@Param("fuzzy") String fuzzy, @Param("id") String id, @Param("flowState") String flowState);

    /**
     * 计算应交总金额和实缴总金额
     *
     * @param ids 业务ID集合
     * @return 应交总金额和实缴总金额
     */
    DepReq count(String ids);

    /**
     * 修改详情表，绑定交存申请，修改详情状态
     *
     * @param uuid     申请ID
     * @param id       业务ID
     * @param userName 操作人
     */
    int updateDetail(@Param("uuid") String uuid, @Param("id") String id, @Param("userName") String userName, @Param("money") BigDecimal money);

    /**
     * 查询业务id关联的申请id
     *
     * @param id 业务id
     * @return 申请id
     */
    List<String> getDepReqIdList(String id);

    /**
     * 获取刚交存申请的打印通知单列表
     *
     * @param id 申请ID集合
     * @return 打印通知单列表
     */
    List<DepositAudit> getAuditList(String id);

    /**
     * 获取业主姓名
     *
     * @param id 申请Id
     * @return 业主姓名
     */
    String getUserName(String id);

    List<DepositApply> getDepositApplyListfterStareWith(@Param("startWith") String startWith);

    int updateState(@Param("state") String state, @Param("id") String id);

    List<DepositApply> findDepositApplyList(@Param("info") DepositApply info);

    DepositApply getInfo(String id);

    int updateValidDate(DepositApply depositApply);

    /**
     * 自交时，申请人为业主
     *
     * @param id 交存ID
     * @return 业主姓名
     */
    String getSelfName(String id);

    /**
     * 代缴时，申请人为代缴开发商
     *
     * @param corpNo 开发商Id
     * @return 开发商名称
     */
    String getBehalfName(String corpNo);

    /**
     * 精确查询催缴列表
     *
     * @param baseRegionInfo 查询实体
     * @return 列表
     */
    List<BaseRegionInfo> getPrintCallList(BaseRegionInfo baseRegionInfo);

    /**
     * 根据小区ID查询催缴打印列表
     * 精确查询
     *
     * @param baseHouseInfo 查询实体
     * @return 列表
     */
    List<BaseHouseInfo> printCallByRegionId(BaseHouseInfo baseHouseInfo);

    /**
     * 根据小区ID查询催缴打印列表
     * 模糊查询
     *
     * @param id    小区ID
     * @param fuzzy 模糊查询字段
     * @return 列表
     */
    List<BaseHouseInfo> fuzzyPrintCallByRegionId(@Param("fuzzy") String fuzzy, @Param("id") String id);

    /**
     * 通知书打印
     * 补打和交存凭证打印，查询的是所有记账后的数据，state=4；
     * 交存通知打印，查询的是申请后，未记账的数据，state=3
     *
     * @param depositApply 查询实体
     * @return 打印列表
     */
    List<DepositApply> printNotice(DepositApply depositApply);

    /**
     * 通知书打印模糊差新
     */
    List<DepositApply> printNoticeFuzzy(@Param("zoneCode") String zoneCode, @Param("fuzzy") String fuzzy);

    /**
     * 查询下边有几条业务
     *
     * @param id
     * @param state
     * @return
     */
    int selectNum(@Param("id") String id, @Param("state") String state);

    /**
     * 查询房屋地址，用于前端打印
     *
     * @param houseId 房间ID
     * @return 房屋地址
     */
    String getAddress(String houseId);

    /**
     * 需要查询房屋地址
     *
     * @param id 交存申请ID
     * @return 房屋地址
     */
    BaseHouseInfo getHouseSite(String id);

    /**
     * 清册打印的表头信息
     *
     * @param id 交存申请ID
     * @return 表头信息
     */
    PrintList getHeadMsg(String id);
}
